package br.com.sisgerenciamento.dto.recebimento;

import java.io.Serializable;
import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.util.Date;

import br.com.sisgerenciamento.dto.pedido.PedidoDTO;
import br.com.sisgerenciamento.dto.usuario.UsuarioDTO;
import br.com.sisgerenciamento.exceptions.ApplicationException;
import br.com.sisgerenciamento.model.recebimento.FormaPagamentoEnum;
import br.com.sisgerenciamento.model.recebimento.RecebimentoVO;
import br.com.sisgerenciamento.utilidades.TreatDate;
import br.com.sisgerenciamento.utilidades.Validator;

public class RecebimentoDTO implements Serializable {

	private static final long serialVersionUID = -1811709202622407991L;
	private Long codigo;
	private Date dataHoraRecebimento;
	private Integer forma;
	private BigDecimal valor;
	private Boolean pendente;
	private UsuarioDTO usuario;
	private PedidoDTO pedido;
	private String nomeCliente;
	private Long codigoPedido;
	private Long codigoUsuario;
	
	public void validar() throws ApplicationException{
		Validator validator =  Validator.novo();
		validator.obrigatorio(getDataHoraRecebimento(), getForma(), getValor(), getUsuario());
	}
	
	public RecebimentoVO getVO() throws NoSuchAlgorithmException{
		RecebimentoVO recebimento = new RecebimentoVO();
		
		recebimento.setCodigo(getCodigo());
		recebimento.setDataHoraRecebimento(getDataHoraRecebimento());
		recebimento.setForma(FormaPagamentoEnum.getByValor(getForma()));
		if(getUsuario() != null){
			recebimento.setUsuario(getUsuario().getVO());
		}
		recebimento.setValor(getValor());		
		recebimento.setPendente(getPendente());
		
		return recebimento;
	}
	
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Date getDataHoraRecebimento() {
		return dataHoraRecebimento;
	}
	public void setDataHoraRecebimento(Date dataHoraRecebimento) {
		this.dataHoraRecebimento = dataHoraRecebimento;
	}
	public String getDataHoraRecebimentoFormatada() {
		if(dataHoraRecebimento != null){
			return TreatDate.format("dd/MM/yyyy HH:mm", dataHoraRecebimento);
		}
		return "";
	}
	
	public String getFormaPagamento(){
		FormaPagamentoEnum formaPagto = FormaPagamentoEnum.getByValor(forma);
		if(formaPagto != null){
			return formaPagto.getDescricao();
		}
		return "";
	}
	
	public Integer getForma() {
		return forma;
	}
	public void setForma(Integer forma) {
		this.forma = forma;
	}
	public BigDecimal getValor() {
		return valor;
	}
	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}
	public UsuarioDTO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioDTO usuario) {
		this.usuario = usuario;
	}
	public Boolean getPendente() {
		return pendente;
	}
	public void setPendente(Boolean pendente) {
		this.pendente = pendente;
	}
	public String getNomeCliente() {
		return nomeCliente;
	}
	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}
	public Long getCodigoUsuario() {
		return codigoUsuario;
	}

	public void setCodigoUsuario(Long codigoUsuario) {
		this.codigoUsuario = codigoUsuario;
	}

	public Long getCodigoPedido() {
		return codigoPedido;
	}

	public void setCodigoPedido(Long codigoPedido) {
		this.codigoPedido = codigoPedido;
	}

	public PedidoDTO getPedido() {
		return pedido;
	}

	public void setPedido(PedidoDTO pedido) {
		this.pedido = pedido;
	}
	
	
}
